/**
 * @用途
 * @author 黄敏
 * @创建时间 2025-05-28 08:38
 **/
import type { ChildProcessWithoutNullStreams } from 'node:child_process'
import { spawn } from 'node:child_process'
import electronPath from 'electron'

let electronApp: ChildProcessWithoutNullStreams | undefined

// 重新加载应用
export default function reloadElectronApp(onlyClose = false) {
  console.log('🔄 正在重新加载 Electron 应用...', { onlyClose, hasExistingApp: !!electronApp })

  if (electronApp) {
    console.log('🛑 正在关闭现有的 Electron 应用...')
    electronApp.removeAllListeners()
    electronApp.kill()
    electronApp = undefined
  }

  if (onlyClose) {
    console.log('✅ Electron 应用已关闭 (仅关闭模式)')
    return
  }

  // Start Electron.app
  console.log('🚀 正在启动新的 Electron 应用...')
  electronApp = spawn(electronPath as unknown as string, ['.'])
  // Exit command after Electron.app exits
  electronApp.once('exit', process.exit)

  // 监听Electron进程的输出和错误
  // electronApp.stdout?.on('data', data => {
  //   const str = data.toString().trim()
  //   if (str) console.log(str)
  // })
  //
  // electronApp.stderr?.on('data', data => {
  //   const str = data.toString().trim()
  //   if (str) console.error(str)
  // })
}

/**
 * 仅关闭 Electron 应用，不重启
 */
export function closeElectronApp() {
  reloadElectronApp(true)
}

/**
 * 检查是否有运行中的 Electron 应用
 */
export function hasRunningElectronApp(): boolean {
  return !!electronApp
}
